# Python字符串切分：用rsplit从右到左玩转拆分

# [钛妹]: 基础不牢谈何AI？今天钛妹又学习了Python的rsplit方法，欢迎大神们指正错误！
# [钛哥]: 嗯，rsplit看似简单，但关键要了解它和split的区别，还能搞点花活。
txt = "apple, banana, cherry, date"

# [钛妹]: 我先想简单分割一下，用“逗号+空格”来分割，这个rsplit要怎么写？
# [钛哥]: 很容易呀，只需传入分隔符。注意rsplit是“从右往左”开始分割，但如果不写maxsplit，它效果跟split类似。
result_default = txt.rsplit(", ")
print("示例1 - 不指定maxsplit时，结果:", result_default)

# [钛妹]: 啊，这看起来跟正常split没什么区别嘛？
# [钛哥]: 是的，只有当我们想从右侧限制分割次数时，才更能体现rsplit的优势。
#         比如只想分割一次，就传入maxsplit=1，你看下面这个例子。

result_one_split = txt.rsplit(", ", 1)
print("示例2 - 仅分割一次时，结果:", result_one_split)

# [钛妹]: 这样的话，前面都被视为第一部分，最后一次逗号以右的所有内容算第二部分了？
# [钛哥]: 没错，这就是“右分割”的特点。而普通split(", ", 1)则是从左边开始分割一次，结果会有些差别。
left_split_once = txt.split(", ", 1)
print("补充 - 用split从左侧分割一次:", left_split_once)

# [钛妹]: 如果我再多加一点例子，看看指定maxsplit=2会怎样？
# [钛哥]: 行啊，你可以试试，这样就会先从右找到第一个分隔符，再找到第二个分隔符，最后剩下的整体当做第一部分。
result_two_splits = txt.rsplit(", ", 2)
print("示例3 - 右侧进行两次分割:", result_two_splits)

# [钛妹]: 我发现有时候字符串里没有指定的分隔符，或者就干脆用默认空白符分割，这时怎么办？
# [钛哥]: 如果不给separator参数，比如rsplit()空着，那就跟split()一样会用空白符(空格、换行等)作为默认分隔符。
#         如果指定的分隔符不存在，就返回整个字符串当作一个列表元素。
txt_spaces = "apple   banana    cherry"
result_spaces = txt_spaces.rsplit()  # 不指定分隔符，相当于split()
print("示例4 - 不写分隔符, 默认按空白符分割:", result_spaces)

# [钛妹]: 原来如此，那如果分隔符确实找不到呢？
# [钛哥]: 那返回的列表就只有一个元素，即原字符串本身。来，我们演示一下：
txt_no_comma = "apple banana cherry date"
result_no_comma = txt_no_comma.rsplit(", ")
print("示例5 - 分隔符不存在时:", result_no_comma)

# [钛妹]: 那能不能总结一下rsplit这个方法？
# [钛哥]: 好的，简单来说：
#         1. rsplit(separator, maxsplit)从右向左分割字符串；
#         2. 若不传maxsplit，跟split差别不大；
#         3. 若指定maxsplit=n，就会最大进行n次分割，优先从右往左搜索分隔符；
#         4. 如果分隔符不存在，返回包含原字符串的列表；
#         5. 如果分隔符和maxsplit均不写，则默认用空白符分割，类似split()。

# [钛妹]: 原来rsplit真的是一个从右往左的小能手，学到了！
# [钛哥]: 确实如此，以后如果你想保留左边更多的完整内容，而只分割右侧部分，可以使用rsplit。
print("好啦，这期内容到此结束，你是不是感觉又进步了一点点？点赞关注不迷路！")